archivo <- './data/Datos-dax-nasdaq-originales.xlsx'
dax_nasdaq_dow <- read_excel(archivo, col_names = TRUE)
names(dax_nasdaq_dow)
## [1] "Fecha"                            "DAX 30 PERFORMANCE - PRICE INDEX"
## [3] "NASDAQ COMPOSITE - PRICE INDEX"
names(dax_nasdaq_dow) <- c("Fecha", "DAX", "NASDAQ")
names(dax_nasdaq_dow)
## [1] "Fecha"  "DAX"    "NASDAQ"
summary(dax_nasdaq_dow)
##      Fecha                          DAX              NASDAQ        
##  Min.   :1971-02-05 00:00:00   Min.   :  372.3   Min.   :   54.87  
##  1st Qu.:1983-07-21 18:00:00   1st Qu.:  710.9   1st Qu.:  247.13  
##  Median :1996-01-04 12:00:00   Median : 2320.2   Median : 1057.44  
##  Mean   :1996-01-05 02:24:00   Mean   : 4048.6   Mean   : 1877.67  
##  3rd Qu.:2008-06-19 06:00:00   3rd Qu.: 6351.3   3rd Qu.: 2508.07  
##  Max.   :2020-12-03 00:00:00   Max.   :13789.0   Max.   :12377.18
indice_dax <- as.numeric(unlist(dax_nasdaq_dow[,"DAX"]))
rend_log_dax <- diff(log(indice_dax))
#agrego un 0 al principio para poder agregar la columna de rendimientos al dataframe original 
rend_log_dax <- c(0, rend_log_dax)

indice_nasdaq <- as.numeric(unlist(dax_nasdaq_dow[,"NASDAQ"]))
rend_log_nasdaq <- diff(log(indice_nasdaq))
#agrego un NA al principio para poder agregar la columna de rendimientos al dataframe original 
rend_log_nasdaq <- c(0, rend_log_nasdaq)
df_dax_nasdaq_dow <- cbind(dax_nasdaq_dow,
                           rdto_dax=rend_log_dax, 
                           rdto_nasdaq=rend_log_nasdaq
                           )

# reordenamos columnas
df_dax_nasdaq_dow <- df_dax_nasdaq_dow[, c(1, 2, 4, 3, 5)]
head(df_dax_nasdaq_dow)

Se muestran las estadísticas principales del dataset.

summary(df_dax_nasdaq_dow)
##      Fecha                          DAX             rdto_dax         
##  Min.   :1971-02-05 00:00:00   Min.   :  372.3   Min.   :-0.1370990  
##  1st Qu.:1983-07-21 18:00:00   1st Qu.:  710.9   1st Qu.:-0.0055691  
##  Median :1996-01-04 12:00:00   Median : 2320.2   Median : 0.0002207  
##  Mean   :1996-01-05 02:24:00   Mean   : 4048.6   Mean   : 0.0002508  
##  3rd Qu.:2008-06-19 06:00:00   3rd Qu.: 6351.3   3rd Qu.: 0.0065904  
##  Max.   :2020-12-03 00:00:00   Max.   :13789.0   Max.   : 0.1079747  
##      NASDAQ          rdto_nasdaq        
##  Min.   :   54.87   Min.   :-0.1314915  
##  1st Qu.:  247.13   1st Qu.:-0.0041536  
##  Median : 1057.44   Median : 0.0007315  
##  Mean   : 1877.67   Mean   : 0.0003706  
##  3rd Qu.: 2508.07   3rd Qu.: 0.0058327  
##  Max.   :12377.18   Max.   : 0.1325465

Estadísticas más completas del rendimiento del índice dax

#Cálculo simple de estadíticos descriptivos
min <- min(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
q1 <- quantile(df_dax_nasdaq_dow$rdto_dax, probs = 0.25, na.rm = TRUE)
media <- mean.default(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
media_rec <- mean.default(df_dax_nasdaq_dow$rdto_dax, trim = 0.025, na.rm = TRUE)
mediana <- median.default(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
moda <- mfv(df_dax_nasdaq_dow$rdto_dax)
var <- var(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
desvest <- sd(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
q3 <- quantile(df_dax_nasdaq_dow$rdto_dax, probs = 0.75, na.rm = TRUE)
max <- max(df_dax_nasdaq_dow$rdto_dax, na.rm = TRUE)
s <- skew(df_dax_nasdaq_dow$rdto_dax)
c <- kurtosi(df_dax_nasdaq_dow$rdto_dax)

#Valores de estadísticos como vector
descriptivos_rdto_dax <- as.numeric(round(c(min, q1, media, media_rec, mediana, moda,
                          var, desvest, q3, max, s, c),5))

nombres_desc_rdto_dax <- c("Mínimo", "Q1", "Media", "Media recortada", "Mediana", "Moda",
             "Varianza", "Desviación Estándar", "Q3", "Máximo", "Simetría", "Curtosis")

cuadro_eda_dax <- as.data.frame(rbind(nombres_desc_rdto_dax,descriptivos_rdto_dax))
tabla_eda_dax <- data.frame(t(cuadro_eda_dax[-1]),row.names = NULL)
colnames(tabla_eda_dax) <- c("Estadístico","rdto_dax")
#tabla_eda_dax
# Generación de una tabla
kable(tabla_eda_dax, align = c("l", "c")) %>% 
  kable_styling(full_width = F, bootstrap_options = "condensed") %>% 
  column_spec(1, width = "12em") %>% 
  column_spec(2, width = "10em") 
Estadístico rdto_dax
Q1 -0.00557
Media 0.00025
Media recortada 0.00036
Mediana 0.00022
Moda 0
Varianza 0.00016
Desviación Estándar 0.01258
Q3 0.00659
Máximo 0.10797
Simetría -0.36556
Curtosis 8.13234

Se agregan las columnas correspondientes a los días de la semana.

df_dax_nasdaq_dow <- as_tibble(df_dax_nasdaq_dow)
df_dax_nasdaq_dow <- mutate(df_dax_nasdaq_dow,
                            dia = weekdays(df_dax_nasdaq_dow$Fecha, abbreviate = FALSE)
)
df_dax_nasdaq_dow$dia[df_dax_nasdaq_dow$dia == "miércoles"] <- "miercoles"
head(df_dax_nasdaq_dow)

Gráfico de la serie temporal de rendimientos del índice DAX

Se ordenan los días de la semana.

## [1] "viernes"   "lunes"     "martes"    "miercoles" "jueves"
## [1] "lunes"     "martes"    "miercoles" "jueves"    "viernes"

Se generan valores binarios para los días de la semana.

df_dax_nasdaq_dow_dummies <- df_dax_nasdaq_dow %>% 
  mutate(var = 1) %>%                                   # Asigno un 1 en todas las filas de una columna
  spread(key = dia, value = var, fill = 0) %>%          # Creo las variables dummy 

# Reordeno y elimino lunes
dplyr::select(Fecha, DAX, rdto_dax, NASDAQ, rdto_nasdaq, martes, miercoles, jueves, viernes)  
head(df_dax_nasdaq_dow_dummies)

Regresión mínimo cuadrática

Para el cálculo de la regresión se descartan las columnas Fecha, DAX y NASDAQ, quedando seleccionadas solamente las columnas de los días y la correspondiente al Rendimiento DAX.

analysis_dax <- df_dax_nasdaq_dow_dummies %>% dplyr::select(-Fecha,-DAX,-NASDAQ,-rdto_nasdaq)
head(analysis_dax)

Se calculan los valores de correlación entre los días de la semana y el rendimiento.

cor(analysis_dax)
##               rdto_dax       martes    miercoles       jueves    viernes
## rdto_dax   1.000000000  0.006515476  0.006913422 -0.003329002  0.0115477
## martes     0.006515476  1.000000000 -0.250000000 -0.250000000 -0.2500000
## miercoles  0.006913422 -0.250000000  1.000000000 -0.250000000 -0.2500000
## jueves    -0.003329002 -0.250000000 -0.250000000  1.000000000 -0.2500000
## viernes    0.011547696 -0.250000000 -0.250000000 -0.250000000  1.0000000

Se observa una correlación negativa del día jueves.

library(GGally)
ggpairs(analysis_dax, lower = list(continuous = "smooth"),
        diag = list(continuous = "barDiag"), axisLabels = "none")

Se genera la regresión lineal con el objetivo de explicar los valores de rdto_dax en base a las variables dicotómicas independientes correspondientes a los días de la semana. En este caso se tiene la ecuación \(R_t = \beta_2 M_t + \beta_3 X_t + \beta_4 J_t + \beta_5 V_t + \epsilon_t\) Las variables \(M_t\), \(X_t\), \(J_t\) y \(V_t\) son las variables dummy asociadas a los días de la semana, tomando valor 1 si la observación corresponde a dicho día y 0 en otro caso. Los coeficientes \(\beta_2, \beta_3, \beta_4\) y \(\beta_5\) representan los rendimientos medios de cada día. El término de error se representa mediante \(\epsilon_t\). En este caso se han considerado 4 variables dummys correspondientes a los días martes, miércoles, jueves y viernes para tratar de explicar la variabilidad de los rendimientos tomando como base el día lunes.

Se configura y ejecuta el modelo.

full_model_dax <- lm(rdto_dax ~ martes + miercoles + jueves + viernes, data = analysis_dax)
summary(full_model_dax)
## 
## Call:
## lm(formula = rdto_dax ~ martes + miercoles + jueves + viernes, 
##     data = analysis_dax)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.136805 -0.005838  0.000177  0.006320  0.108268 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -0.0002937  0.0002466  -1.191   0.2337  
## martes       0.0007084  0.0003488   2.031   0.0423 *
## miercoles    0.0007185  0.0003488   2.060   0.0394 *
## jueves       0.0004608  0.0003488   1.321   0.1865  
## viernes      0.0008350  0.0003488   2.394   0.0167 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01258 on 12995 degrees of freedom
## Multiple R-squared:  0.0005626,  Adjusted R-squared:  0.000255 
## F-statistic: 1.829 on 4 and 12995 DF,  p-value: 0.1202

#El modelo con las 4 variables dummys introducidas como predictores tiene un valor de \(R_2\) bajo (0.00056). #El p-value del estadístico F no es significativo (0.1202). En los resultados se observa que el p-value de la prueba de hipótesis del estadístico t para el día jueves es 0.1865 (mayor que 0.05), lo que estaría indicando que la variabilidad de los rendimientos no está relacionada con la variabilidad de los jueves, al menos para estos datos.

Si se aplica la estrategia de stepwise mixto para selección de los mejores predictores, se obtiene que el mejor modelo es lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax), lo que refuerza la evidencia de que el día jueves no presenta valor explicativo.

step(object = full_model_dax, direction = "both", trace = 1)
## Start:  AIC=-113769.2
## rdto_dax ~ martes + miercoles + jueves + viernes
## 
##             Df  Sum of Sq    RSS     AIC
## - jueves     1 0.00027604 2.0556 -113769
## <none>                    2.0554 -113769
## - martes     1 0.00065246 2.0560 -113767
## - miercoles  1 0.00067103 2.0560 -113767
## - viernes    1 0.00090646 2.0563 -113765
## 
## Step:  AIC=-113769.5
## rdto_dax ~ martes + miercoles + viernes
## 
##             Df  Sum of Sq    RSS     AIC
## <none>                    2.0556 -113769
## + jueves     1 0.00027604 2.0554 -113769
## - martes     1 0.00039611 2.0560 -113769
## - miercoles  1 0.00041287 2.0561 -113769
## - viernes    1 0.00063366 2.0563 -113767
## 
## Call:
## lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax)
## 
## Coefficients:
## (Intercept)       martes    miercoles      viernes  
##  -6.332e-05    4.780e-04    4.881e-04    6.046e-04

Se ejecuta la regresión lineal considerando las variables dummys se los días martes, miércoles y viernes.

full_model_dax2 <- lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax)
summary(full_model_dax2)
## 
## Call:
## lm(formula = rdto_dax ~ martes + miercoles + viernes, data = analysis_dax)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.137036 -0.005814  0.000063  0.006311  0.108038 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -6.332e-05  1.744e-04  -0.363   0.7166  
## martes       4.780e-04  3.021e-04   1.582   0.1136  
## miercoles    4.881e-04  3.021e-04   1.616   0.1062  
## viernes      6.046e-04  3.021e-04   2.002   0.0454 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.01258 on 12996 degrees of freedom
## Multiple R-squared:  0.0004284,  Adjusted R-squared:  0.0001977 
## F-statistic: 1.857 on 3 and 12996 DF,  p-value: 0.1346

Al aplicar este modelo se obtiene el p-value de la prueba de hipótesis del estadístico t para el día viernes = 0.0454 (menor que 0.05), lo que estaría indicando, con un nivel de significancia de 0.05 que hay un efecto del día viernes.

REGRESIÓN INCORPORANDO LA ECUACIÓN DE VARIANZA COMO UN MODELO GARCH(1,1)

Se generan los vectores de rendimiento para DAX y los vectores de los días martes a viernes.

n <- nrow(df_dax_nasdaq_dow_dummies)

rdto_dax <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"rdto_dax"]))

vardias_ma <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"martes"]))
vardias_mi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"miercoles"]))
vardias_ju <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"jueves"]))
vardias_vi <- as.numeric(unlist(df_dax_nasdaq_dow_dummies[2:n,"viernes"]))

vardias <- cbind(vardias_ma,vardias_mi,vardias_ju,vardias_vi)

Se prueban distintos modelos para analizarlos, se analizan si los residuos son ruido blanco y se seleccionan los modelos mas adecuados.

Modelo sGARCH(1,1) con External Regressors en modelo de media. Distribución std.

spec_dax1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_dax1 <- ugarchfit(spec=spec_dax1,data=rdto_dax)

Modelo sGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución std

spec_dax1_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_dax1_2er <- ugarchfit(spec=spec_dax1_2er,data=rdto_dax)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media. Distribución std

spec_dax2 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax2 <- ugarchfit(spec=spec_dax2,data=rdto_dax)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución std

spec_dax2_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors  = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax2_2er <- ugarchfit(spec=spec_dax2_2er,data=rdto_dax)

Modelo eGARCH(1,1) con External Regressors en modelo de media. Distribución std

spec_dax3 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax3 <- ugarchfit(spec=spec_dax3,data=rdto_dax)

Modelo eGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución std

spec_dax3_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax3_2er <- ugarchfit(spec=spec_dax3_2er,data=rdto_dax)

Modelo sGARCH(1,1) con External Regressors en modelo de media. Distribución norm

spec_dax4 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax4 <- ugarchfit(spec=spec_dax4,data=rdto_dax)

Modelo sGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución norm

spec_dax4_2er <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax4_2er <- ugarchfit(spec=spec_dax4_2er,data=rdto_dax)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media. Distribución norm

spec_dax5 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax5 <- ugarchfit(spec=spec_dax5,data=rdto_dax)

Modelo gjrGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución norm

spec_dax5_2er <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax5_2er <- ugarchfit(spec=spec_dax5_2er,data=rdto_dax)

Modelo eGARCH(1,1) con External Regressors en modelo de media. Distribución norm

spec_dax6 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax6 <- ugarchfit(spec=spec_dax6,data=rdto_dax)

Modelo eGARCH(1,1) con External Regressors en modelo de media y de varianza. Distribución norm

spec_dax6_2er <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(0, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax6_2er <- ugarchfit(spec=spec_dax6_2er,data=rdto_dax)

Modelos GARCH(1,1) con ARMA(1,0)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución std

spec_dax1_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_dax1_ar1 <- ugarchfit(spec=spec_dax1_ar1,data=rdto_dax)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución std

spec_dax1_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                        submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                        mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
                        distribution.model = "std")
garch_dax1_2er_ar1 <- ugarchfit(spec=spec_dax1_2er_ar1,data=rdto_dax)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución std

spec_dax2_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax2_ar1 <- ugarchfit(spec=spec_dax2_ar1,data=rdto_dax)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución std

spec_dax2_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors  = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax2_2er_ar1 <- ugarchfit(spec=spec_dax2_2er_ar1,data=rdto_dax)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución std

spec_dax3_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax3_ar1 <- ugarchfit(spec=spec_dax3_ar1,data=rdto_dax)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución std

spec_dax3_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "std")
garch_dax3_2er_ar1 <- ugarchfit(spec=spec_dax3_2er_ar1,data=rdto_dax)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución norm

spec_dax4_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax4_ar1 <- ugarchfit(spec=spec_dax4_ar1,data=rdto_dax)

Modelo sGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución norm

spec_dax4_2er_ar1 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax4_2er_ar1 <- ugarchfit(spec=spec_dax4_2er_ar1,data=rdto_dax)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución norm

spec_dax5_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax5_ar1 <- ugarchfit(spec=spec_dax5_ar1,data=rdto_dax)

Modelo gjrGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución norm

spec_dax5_2er_ar1 <- ugarchspec(variance.model = list(model = "gjrGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax5_2er_ar1 <- ugarchfit(spec=spec_dax5_2er_ar1,data=rdto_dax)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media. Distribución norm

spec_dax6_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = NULL, variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax6_ar1 <- ugarchfit(spec=spec_dax6_ar1,data=rdto_dax)

Modelo eGARCH(1,1) con ARMA(1,0) con External Regressors en modelo de media y de varianza. Distribución norm

spec_dax6_2er_ar1 <- ugarchspec(variance.model = list(model = "eGARCH", garchOrder = c(1, 1), 
                    submodel = NULL, external.regressors = vardias[,1:4], variance.targeting = FALSE), 
                    mean.model = list(armaOrder = c(1, 0),external.regressors = vardias[,1:4]),
               distribution.model = "norm")
garch_dax6_2er_ar1 <- ugarchfit(spec=spec_dax6_2er_ar1,data=rdto_dax)
Resumen del modelo y Ljung-Box test
vmodel vp vq vxreg mp mq mxreg dist lb1 lb2 lb5 ic1
garch_dax1 sGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000006 -6.317451
garch_dax1_2er sGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000001 -5.990429
garch_dax2 gjrGARCH 1 1 0 0 0 4 std 0.000000 0.000001 0.000010 -6.327784
garch_dax2_2er gjrGARCH 1 1 4 0 0 4 std 0.000000 0.000001 0.000010 -6.327169
garch_dax3 eGARCH 1 1 0 0 0 4 std 0.000001 0.000004 0.000042 -6.326111
garch_dax3_2er eGARCH 1 1 4 0 0 4 std 0.000001 0.000002 0.000019 -6.327653
garch_dax4 sGARCH 1 1 0 0 0 4 norm 0.000000 0.000001 0.000008 -6.265282
garch_dax4_2er sGARCH 1 1 4 0 0 4 norm 0.000000 0.000001 0.000008 -6.264669
garch_dax5 gjrGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000003 -6.172693
garch_dax5_2er gjrGARCH 1 1 4 0 0 4 norm 0.000000 0.000001 0.000011 -6.279725
garch_dax6 eGARCH 1 1 0 0 0 4 norm 0.000001 0.000005 0.000050 -6.275521
garch_dax6_2er eGARCH 1 1 4 0 0 4 norm 0.000001 0.000003 0.000032 -6.283686
garch_dax1_ar1 sGARCH 1 1 0 1 0 4 std 0.094100 0.167441 0.291146 -6.318636
garch_dax1_2er_ar1 sGARCH 1 1 4 1 0 4 std 0.000002 0.000008 0.000089 -5.990624
garch_dax2_ar1 gjrGARCH 1 1 0 1 0 4 std 0.000010 0.000033 0.000313 -6.201730
garch_dax2_2er_ar1 gjrGARCH 1 1 4 1 0 4 std 0.340867 0.314016 0.360710 -6.328718
garch_dax3_ar1 eGARCH 1 1 0 1 0 4 std 0.373114 0.316571 0.385930 -6.327444
garch_dax3_2er_ar1 eGARCH 1 1 4 1 0 4 std 0.285428 0.239729 0.311170 -6.328957
garch_dax4_ar1 sGARCH 1 1 0 1 0 4 norm 0.484296 0.507616 0.532465 -6.266996
garch_dax4_2er_ar1 sGARCH 1 1 4 1 0 4 norm 0.499077 0.515168 0.536846 -6.266385
garch_dax5_ar1 gjrGARCH 1 1 0 1 0 4 norm 0.000015 0.000036 0.000387 -6.173821
garch_dax5_2er_ar1 gjrGARCH 1 1 4 1 0 4 norm 0.941061 0.499009 0.458293 -6.281795
garch_dax6_ar1 eGARCH 1 1 0 1 0 4 norm 0.897624 0.469150 0.455372 -6.277386
garch_dax6_2er_ar1 eGARCH 1 1 4 1 0 4 norm 0.542325 0.330240 0.365667 -6.285087
t_resumen_lb
Resumen del modelo y Ljung-Box test
vmodel vp vq vxreg mp mq mxreg dist lb1 lb2 lb5 ic1
garch_dax1 sGARCH 1 1 0 0 0 4 std 0.000000 0.000000 0.000006 -6.317451
garch_dax1_2er sGARCH 1 1 4 0 0 4 std 0.000000 0.000000 0.000001 -5.990429
garch_dax2 gjrGARCH 1 1 0 0 0 4 std 0.000000 0.000001 0.000010 -6.327784
garch_dax2_2er gjrGARCH 1 1 4 0 0 4 std 0.000000 0.000001 0.000010 -6.327169
garch_dax3 eGARCH 1 1 0 0 0 4 std 0.000001 0.000004 0.000042 -6.326111
garch_dax3_2er eGARCH 1 1 4 0 0 4 std 0.000001 0.000002 0.000019 -6.327653
garch_dax4 sGARCH 1 1 0 0 0 4 norm 0.000000 0.000001 0.000008 -6.265282
garch_dax4_2er sGARCH 1 1 4 0 0 4 norm 0.000000 0.000001 0.000008 -6.264669
garch_dax5 gjrGARCH 1 1 0 0 0 4 norm 0.000000 0.000000 0.000003 -6.172693
garch_dax5_2er gjrGARCH 1 1 4 0 0 4 norm 0.000000 0.000001 0.000011 -6.279725
garch_dax6 eGARCH 1 1 0 0 0 4 norm 0.000001 0.000005 0.000050 -6.275521
garch_dax6_2er eGARCH 1 1 4 0 0 4 norm 0.000001 0.000003 0.000032 -6.283686
garch_dax1_ar1 sGARCH 1 1 0 1 0 4 std 0.094100 0.167441 0.291146 -6.318636
garch_dax1_2er_ar1 sGARCH 1 1 4 1 0 4 std 0.000002 0.000008 0.000089 -5.990624
garch_dax2_ar1 gjrGARCH 1 1 0 1 0 4 std 0.000010 0.000033 0.000313 -6.201730
garch_dax2_2er_ar1 gjrGARCH 1 1 4 1 0 4 std 0.340867 0.314016 0.360710 -6.328718
garch_dax3_ar1 eGARCH 1 1 0 1 0 4 std 0.373114 0.316571 0.385930 -6.327444
garch_dax3_2er_ar1 eGARCH 1 1 4 1 0 4 std 0.285428 0.239729 0.311170 -6.328957
garch_dax4_ar1 sGARCH 1 1 0 1 0 4 norm 0.484296 0.507616 0.532465 -6.266996
garch_dax4_2er_ar1 sGARCH 1 1 4 1 0 4 norm 0.499077 0.515168 0.536846 -6.266385
garch_dax5_ar1 gjrGARCH 1 1 0 1 0 4 norm 0.000015 0.000036 0.000387 -6.173821
garch_dax5_2er_ar1 gjrGARCH 1 1 4 1 0 4 norm 0.941061 0.499009 0.458293 -6.281795
garch_dax6_ar1 eGARCH 1 1 0 1 0 4 norm 0.897624 0.469150 0.455372 -6.277386
garch_dax6_2er_ar1 eGARCH 1 1 4 1 0 4 norm 0.542325 0.330240 0.365667 -6.285087
tabla_ljung_box <- as_tibble(t_comp_lb)
tabla <- tabla_ljung_box %>% filter(lb1 > 0.05, lb2 > 0.05, lb5 > 0.05)
tabla <- arrange(tabla, desc(ic1))                        

# tabla con valores de Ljung Box adecuados
t_resumen_lb <- knitr::kable(tabla,
                             digits = 6,
                             caption = "Modelos con valores adecuados del Ljung-Box test", booktabs = TRUE) %>%
                             kable_styling(font_size = 11)
column_spec(t_resumen_lb, 1:7, width = "7em")#, bold = TRUE, italic = TRUE)
Modelos con valores adecuados del Ljung-Box test
vmodel vp vq vxreg mp mq mxreg dist lb1 lb2 lb5 ic1
sGARCH 1 1 4 1 0 4 norm 0.499077 0.515168 0.536846 -6.266385
sGARCH 1 1 0 1 0 4 norm 0.484296 0.507616 0.532465 -6.266996
eGARCH 1 1 0 1 0 4 norm 0.897624 0.469150 0.455372 -6.277386
gjrGARCH 1 1 4 1 0 4 norm 0.941061 0.499009 0.458293 -6.281795
eGARCH 1 1 4 1 0 4 norm 0.542325 0.330240 0.365667 -6.285087
sGARCH 1 1 0 1 0 4 std 0.094100 0.167441 0.291146 -6.318636
eGARCH 1 1 0 1 0 4 std 0.373114 0.316571 0.385930 -6.327444
gjrGARCH 1 1 4 1 0 4 std 0.340867 0.314016 0.360710 -6.328718
eGARCH 1 1 4 1 0 4 std 0.285428 0.239729 0.311170 -6.328957

Significado de cada columna de la tabla

vmodel= modelo GARCH implementado.

vp= orden p del modelo de la varianza ARCH .

vq= orden q del modelo de la varianza GARCH.

vxreg= cantidad de regresores externos en el modelo de la varianza.

mp= orden p del modelo de la media AR.

mq= orden q del modelo de la media MA.

mxreg= cantidad de regresores externos en el modelo de la media.

dist= distribución que siguen los errores.

lb1= valor del test de Ljung-Box para el rezago uno.

lb2= valor del test de Ljung-Box para el rezago dos.

lb5= valor del test de Ljung-Box para el rezago cinco.

ic1= valor de akaike del modelo.

Análisis de los resultados

Para poder analizar los modelos y elegir el mejor, debemos observar los valores del test de Ljung-Box y el de los criterios de información. En el caso del test de Ljung-Box buscamos un valor mayor a 0.05 que nos indique que los residuos del modelo son ruido blanco y no contienen información significativa. En la tabla se observan solo los modelos que cumplen con este filtro. Se muestran los valores del test para los rezagos uno, dos y cinco (lb1, lb2, lb5). Respecto a los criterios de información, en la tabla se muestra el valor de akaike de los modelos (ic1). El mejor modelo es el modelo con menor valor de akaike, por ello la tabla se encuentra ordenada de forma descendiente de acuerdo a este valor.

Siguiendo estas indicaciones se puede observar que los dos mejores modelos son:

1_ gjrGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER en media y varianza (garch_dax2_2er_ar1)

2_ eGARCH con GARCH(1,1), ARMA(1,0), distribucion std y ER en media y varianza (garch_dax3_2er_ar1)

Parámetros de los dos mejores modelos y sus valores de significancia:

garch_dax2_2er_ar1
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : gjrGARCH(1,1)
## Mean Model   : ARFIMA(1,0,0)
## Distribution : std 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error    t value Pr(>|t|)
## mu     -0.000172    0.000115  -1.492022 0.135693
## ar1     0.042133    0.008863   4.754040 0.000002
## mxreg1  0.000544    0.000185   2.938044 0.003303
## mxreg2  0.000601    0.000173   3.466721 0.000527
## mxreg3  0.000512    0.000209   2.448639 0.014340
## mxreg4  0.001050    0.000199   5.268805 0.000000
## omega   0.000002    0.000000   6.598318 0.000000
## alpha1  0.033631    0.001415  23.772123 0.000000
## beta1   0.907123    0.002865 316.593061 0.000000
## gamma1  0.094642    0.006892  13.731889 0.000000
## vxreg1  0.000000    0.000000   0.156642 0.875527
## vxreg2  0.000000    0.000000   0.083505 0.933450
## vxreg3  0.000000    0.000000   0.000123 0.999902
## vxreg4  0.000000    0.000000   0.122308 0.902655
## shape   8.235425    0.535707  15.372991 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error    t value Pr(>|t|)
## mu     -0.000172    0.000149  -1.156629 0.247424
## ar1     0.042133    0.008327   5.059926 0.000000
## mxreg1  0.000544    0.000239   2.281173 0.022538
## mxreg2  0.000601    0.000152   3.947074 0.000079
## mxreg3  0.000512    0.000285   1.799203 0.071987
## mxreg4  0.001050    0.000338   3.109423 0.001875
## omega   0.000002    0.000001   2.905318 0.003669
## alpha1  0.033631    0.002747  12.240727 0.000000
## beta1   0.907123    0.002932 309.371851 0.000000
## gamma1  0.094642    0.007329  12.913101 0.000000
## vxreg1  0.000000    0.000000   0.137540 0.890604
## vxreg2  0.000000    0.000000   0.084171 0.932921
## vxreg3  0.000000    0.000000   0.000063 0.999950
## vxreg4  0.000000    0.000000   0.102968 0.917988
## shape   8.235425    0.742593  11.090094 0.000000
## 
## LogLikelihood : 41148.5 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -6.3287
## Bayes        -6.3201
## Shibata      -6.3287
## Hannan-Quinn -6.3258
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.9072  0.3409
## Lag[2*(p+q)+(p+q)-1][2]    1.6119  0.3777
## Lag[4*(p+q)+(p+q)-1][5]    3.0964  0.4074
## d.o.f=1
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                     0.9113  0.3398
## Lag[2*(p+q)+(p+q)-1][5]    2.7225  0.4601
## Lag[4*(p+q)+(p+q)-1][9]    3.3543  0.6993
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale P-Value
## ARCH Lag[3]     2.460 0.500 2.000  0.1168
## ARCH Lag[5]     2.469 1.440 1.667  0.3766
## ARCH Lag[7]     2.629 2.315 1.543  0.5861
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  766.5684
## Individual Statistics:                
## mu       1.61180
## ar1      5.28223
## mxreg1   0.35052
## mxreg2   0.33720
## mxreg3   0.10261
## mxreg4   0.11072
## omega  116.99358
## alpha1   0.48910
## beta1    0.82772
## gamma1   1.52229
## vxreg1   0.99601
## vxreg2   0.09621
## vxreg3   0.11440
## vxreg4   0.30238
## shape    0.74327
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          3.26 3.54 4.07
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                    t-value      prob sig
## Sign Bias           1.2019 0.2294178    
## Negative Sign Bias  0.7438 0.4569971    
## Positive Sign Bias  2.8380 0.0045471 ***
## Joint Effect       18.4829 0.0003497 ***
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     165.6    2.062e-25
## 2    30     192.9    4.016e-26
## 3    40     211.4    1.523e-25
## 4    50     240.0    5.532e-27
## 
## 
## Elapsed time : 15.67303
garch_dax3_2er_ar1
## 
## *---------------------------------*
## *          GARCH Model Fit        *
## *---------------------------------*
## 
## Conditional Variance Dynamics    
## -----------------------------------
## GARCH Model  : eGARCH(1,1)
## Mean Model   : ARFIMA(1,0,0)
## Distribution : std 
## 
## Optimal Parameters
## ------------------------------------
##         Estimate  Std. Error   t value Pr(>|t|)
## mu     -0.000240    0.000127   -1.8807 0.060011
## ar1     0.038884    0.009186    4.2330 0.000023
## mxreg1  0.000630    0.000210    3.0022 0.002681
## mxreg2  0.000652    0.000163    3.9988 0.000064
## mxreg3  0.000548    0.000204    2.6916 0.007112
## mxreg4  0.001038    0.000215    4.8310 0.000001
## omega   0.077827    0.044131    1.7635 0.077809
## alpha1 -0.065540    0.005201  -12.6024 0.000000
## beta1   0.985538    0.000380 2591.4844 0.000000
## gamma1  0.153685    0.008367   18.3680 0.000000
## vxreg1 -0.297373    0.076028   -3.9114 0.000092
## vxreg2 -0.211111    0.061792   -3.4165 0.000634
## vxreg3 -0.291755    0.061894   -4.7138 0.000002
## vxreg4 -0.249161    0.076059   -3.2759 0.001053
## shape   8.036470    0.546105   14.7160 0.000000
## 
## Robust Standard Errors:
##         Estimate  Std. Error   t value Pr(>|t|)
## mu     -0.000240    0.000100   -2.3860 0.017034
## ar1     0.038884    0.009342    4.1622 0.000032
## mxreg1  0.000630    0.000202    3.1236 0.001786
## mxreg2  0.000652    0.000107    6.1007 0.000000
## mxreg3  0.000548    0.000180    3.0403 0.002363
## mxreg4  0.001038    0.000202    5.1347 0.000000
## omega   0.077827    0.047895    1.6249 0.104175
## alpha1 -0.065540    0.006827   -9.5997 0.000000
## beta1   0.985538    0.000233 4226.4314 0.000000
## gamma1  0.153685    0.010351   14.8471 0.000000
## vxreg1 -0.297373    0.082046   -3.6245 0.000290
## vxreg2 -0.211111    0.062542   -3.3755 0.000737
## vxreg3 -0.291755    0.062887   -4.6394 0.000003
## vxreg4 -0.249161    0.081558   -3.0550 0.002251
## shape   8.036470    0.762160   10.5443 0.000000
## 
## LogLikelihood : 41150.06 
## 
## Information Criteria
## ------------------------------------
##                     
## Akaike       -6.3290
## Bayes        -6.3203
## Shibata      -6.3290
## Hannan-Quinn -6.3261
## 
## Weighted Ljung-Box Test on Standardized Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                      1.141  0.2854
## Lag[2*(p+q)+(p+q)-1][2]     1.999  0.2137
## Lag[4*(p+q)+(p+q)-1][5]     3.670  0.2829
## d.o.f=1
## H0 : No serial correlation
## 
## Weighted Ljung-Box Test on Standardized Squared Residuals
## ------------------------------------
##                         statistic p-value
## Lag[1]                   0.007379  0.9315
## Lag[2*(p+q)+(p+q)-1][5]  5.269552  0.1329
## Lag[4*(p+q)+(p+q)-1][9]  7.003394  0.1989
## d.o.f=2
## 
## Weighted ARCH LM Tests
## ------------------------------------
##             Statistic Shape Scale  P-Value
## ARCH Lag[3]     8.342 0.500 2.000 0.003875
## ARCH Lag[5]     8.888 1.440 1.667 0.012254
## ARCH Lag[7]     8.955 2.315 1.543 0.032006
## 
## Nyblom stability test
## ------------------------------------
## Joint Statistic:  20.4393
## Individual Statistics:              
## mu     2.01931
## ar1    4.76420
## mxreg1 0.48328
## mxreg2 0.54510
## mxreg3 0.14589
## mxreg4 0.05707
## omega  1.88742
## alpha1 6.18375
## beta1  1.84458
## gamma1 0.93408
## vxreg1 1.66075
## vxreg2 1.95935
## vxreg3 2.13957
## vxreg4 1.93029
## shape  0.88460
## 
## Asymptotic Critical Values (10% 5% 1%)
## Joint Statistic:          3.26 3.54 4.07
## Individual Statistic:     0.35 0.47 0.75
## 
## Sign Bias Test
## ------------------------------------
##                      t-value      prob sig
## Sign Bias           0.549903 0.5823957    
## Negative Sign Bias  0.006882 0.9945094    
## Positive Sign Bias  2.959763 0.0030843 ***
## Joint Effect       16.647198 0.0008352 ***
## 
## 
## Adjusted Pearson Goodness-of-Fit Test:
## ------------------------------------
##   group statistic p-value(g-1)
## 1    20     162.3    9.215e-25
## 2    30     188.6    2.555e-25
## 3    40     217.4    1.269e-26
## 4    50     227.2    9.112e-25
## 
## 
## Elapsed time : 21.04096

Evaluación de los 2 mejores modelos

modelo garch_dax2_2er_ar1

Tabla comparativa de los p-valores de los external regressors para los dos mejores modelos.

El primer modelo seleccionado es gjrGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std. Se han incluido regresores externos como variables dummys tanto en media como en varianza.

t_modelo_dax2 <- print(round(garch_dax2_2er_ar1@fit$matcoef,6), digits = 5)
##         Estimate  Std. Error    t value Pr(>|t|)
## mu     -0.000172    0.000115  -1.492022 0.135693
## ar1     0.042133    0.008863   4.754040 0.000002
## mxreg1  0.000544    0.000185   2.938044 0.003303
## mxreg2  0.000601    0.000173   3.466721 0.000527
## mxreg3  0.000512    0.000209   2.448639 0.014340
## mxreg4  0.001050    0.000199   5.268805 0.000000
## omega   0.000002    0.000000   6.598318 0.000000
## alpha1  0.033631    0.001415  23.772123 0.000000
## beta1   0.907123    0.002865 316.593061 0.000000
## gamma1  0.094642    0.006892  13.731889 0.000000
## vxreg1  0.000000    0.000000   0.156642 0.875527
## vxreg2  0.000000    0.000000   0.083505 0.933450
## vxreg3  0.000000    0.000000   0.000123 0.999902
## vxreg4  0.000000    0.000000   0.122308 0.902655
## shape   8.235425    0.535707  15.372991 0.000000
kable(t_modelo_dax2, row.names = TRUE)
Estimate Std. Error t value Pr(>|t|)
mu -0.000172 0.000115 -1.492022 0.135693
ar1 0.042133 0.008863 4.754040 0.000002
mxreg1 0.000544 0.000185 2.938044 0.003303
mxreg2 0.000601 0.000173 3.466721 0.000527
mxreg3 0.000512 0.000209 2.448639 0.014340
mxreg4 0.001050 0.000199 5.268805 0.000000
omega 0.000002 0.000000 6.598318 0.000000
alpha1 0.033631 0.001415 23.772123 0.000000
beta1 0.907123 0.002865 316.593061 0.000000
gamma1 0.094642 0.006892 13.731889 0.000000
vxreg1 0.000000 0.000000 0.156642 0.875527
vxreg2 0.000000 0.000000 0.083505 0.933450
vxreg3 0.000000 0.000000 0.000123 0.999902
vxreg4 0.000000 0.000000 0.122308 0.902655
shape 8.235425 0.535707 15.372991 0.000000
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo2 <- knitr::kable(t_modelo_dax2,
                             digits = 6,
                             caption = "Modelo gjrGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
                             kable_styling(font_size = 11)
column_spec(t_modelo2, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
Modelo gjrGARCH(1,1) con ARMA(1,0)
Estimate Std. Error t value Pr(>|t|)
mu -0.000172 0.000115 -1.492022 0.135693
ar1 0.042133 0.008863 4.754040 0.000002
mxreg1 0.000544 0.000185 2.938044 0.003303
mxreg2 0.000601 0.000173 3.466721 0.000527
mxreg3 0.000512 0.000209 2.448639 0.014340
mxreg4 0.001050 0.000199 5.268805 0.000000
omega 0.000002 0.000000 6.598318 0.000000
alpha1 0.033631 0.001415 23.772123 0.000000
beta1 0.907123 0.002865 316.593061 0.000000
gamma1 0.094642 0.006892 13.731889 0.000000
vxreg1 0.000000 0.000000 0.156642 0.875527
vxreg2 0.000000 0.000000 0.083505 0.933450
vxreg3 0.000000 0.000000 0.000123 0.999902
vxreg4 0.000000 0.000000 0.122308 0.902655
shape 8.235425 0.535707 15.372991 0.000000

De acuerdo a los p-valores se observa que los regresores externos son significativos, se observa por ejemplo, que el poder explicativo del día viernes es del 0,1%. De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 3.36% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 90.7% por la varianza ajustada del día anterior.

modelo garch_dax3_2er_ar1

El siguiente modelo seleccionado es eGARCH(1,1) con ARMA(1,0) como modelo de media y distribución std.
Se han incluido regresores externos como variables dummys tanto en media como en varianza.

t_modelo_dax3 <- print(round(garch_dax3_2er_ar1@fit$matcoef,6), digits = 5)
##         Estimate  Std. Error   t value Pr(>|t|)
## mu     -0.000240    0.000127   -1.8807 0.060011
## ar1     0.038884    0.009186    4.2330 0.000023
## mxreg1  0.000630    0.000210    3.0022 0.002681
## mxreg2  0.000652    0.000163    3.9988 0.000064
## mxreg3  0.000548    0.000204    2.6916 0.007112
## mxreg4  0.001038    0.000215    4.8310 0.000001
## omega   0.077827    0.044131    1.7635 0.077809
## alpha1 -0.065540    0.005201  -12.6024 0.000000
## beta1   0.985538    0.000380 2591.4844 0.000000
## gamma1  0.153685    0.008367   18.3680 0.000000
## vxreg1 -0.297373    0.076028   -3.9114 0.000092
## vxreg2 -0.211111    0.061792   -3.4165 0.000634
## vxreg3 -0.291755    0.061894   -4.7138 0.000002
## vxreg4 -0.249161    0.076059   -3.2759 0.001053
## shape   8.036470    0.546105   14.7160 0.000000
kable(t_modelo_dax3, row.names = TRUE)
Estimate Std. Error t value Pr(>|t|)
mu -0.000240 0.000127 -1.880713 0.060011
ar1 0.038884 0.009186 4.233036 0.000023
mxreg1 0.000630 0.000210 3.002166 0.002681
mxreg2 0.000652 0.000163 3.998761 0.000064
mxreg3 0.000548 0.000204 2.691568 0.007112
mxreg4 0.001038 0.000215 4.830983 0.000001
omega 0.077827 0.044131 1.763544 0.077809
alpha1 -0.065540 0.005201 -12.602388 0.000000
beta1 0.985538 0.000380 2591.484352 0.000000
gamma1 0.153685 0.008367 18.368034 0.000000
vxreg1 -0.297373 0.076028 -3.911351 0.000092
vxreg2 -0.211111 0.061792 -3.416460 0.000634
vxreg3 -0.291755 0.061894 -4.713810 0.000002
vxreg4 -0.249161 0.076059 -3.275907 0.001053
shape 8.036470 0.546105 14.715983 0.000000
# muestro la tabla resumen del modelo y valores de Ljung-Box test de los residuos del modelo
t_modelo3 <- knitr::kable(t_modelo_dax3,
                             digits = 6,
                             caption = "Modelo eGARCH(1,1) con ARMA(1,0)", booktabs = TRUE) %>%
                             kable_styling(font_size = 11)
column_spec(t_modelo3, 1:5, width = "1em")#, bold = TRUE, italic = TRUE)
Modelo eGARCH(1,1) con ARMA(1,0)
Estimate Std. Error t value Pr(>|t|)
mu -0.000240 0.000127 -1.880713 0.060011
ar1 0.038884 0.009186 4.233036 0.000023
mxreg1 0.000630 0.000210 3.002166 0.002681
mxreg2 0.000652 0.000163 3.998761 0.000064
mxreg3 0.000548 0.000204 2.691568 0.007112
mxreg4 0.001038 0.000215 4.830983 0.000001
omega 0.077827 0.044131 1.763544 0.077809
alpha1 -0.065540 0.005201 -12.602388 0.000000
beta1 0.985538 0.000380 2591.484352 0.000000
gamma1 0.153685 0.008367 18.368034 0.000000
vxreg1 -0.297373 0.076028 -3.911351 0.000092
vxreg2 -0.211111 0.061792 -3.416460 0.000634
vxreg3 -0.291755 0.061894 -4.713810 0.000002
vxreg4 -0.249161 0.076059 -3.275907 0.001053
shape 8.036470 0.546105 14.715983 0.000000

Para este modelo también se observa que los p-valores de los regresores son significativos y que el poder explicativo del día viernes es del 0,1%.

De acuerdo al valor de \(alpha1\) el rendimiento es explicado en un 6.55% por la volatilidad del día anterior. De acuerdo al valor de \(beta1\) el rendimiento es explicado en un 98.5% por la varianza ajustada del día anterior.

Como conclusión se verifica que hay un leve efecto “día de la semana” y con un poder explicativo del 0,1% se considera que el día viernes es el más rentable.

Por lo tanto se asume que el eGARCH(1,1) con ARMA(1,0) podría ser una alternativa para realizar pronósticos de los rendimientos de DAX.

Comparativa de puntos (b) y (c)

Para el dataset DAX se concluye que tanto en la ejecución de la Regresión mínimo cuadrática como al incorpor la ecuación de varianza como modelo GARCH, se detecta que el día jueves no posee valor explicativo para los valores de los rendimientos y, al ejecutar la regresión lineal considerando las variables dummys se los días martes, miércoles y viernes, se observa que el día viernes presenta mayor poder explicativo que los demás días.

Se considera conveniente incorporar los GARCH porque los coeficientes de \(alpha1\) y \(beta1\) dan significativos, y esto ademas permite ver el comportamiento de la varianza.